#ifndef _MCUDRIVERS_SYSTEM_SYSTEM_H
#define	_MCUDRIVERS_SYSTEM_SYSTEM_H

#include <xc.h> // include processor files - each processor file is guarded.  
#include <stdint.h>

//RPn - Port
#if defined(__dsPIC33EP256GP506__)
#define RPI46_RB14 46 //RPI46=RB14
#define RPI47_RB15 47
#define RP118_RG6  118
#define RPI119_RG7  119
#define RP120_RG8  120
#define RPI121_RG9  21
#define RPI28_RA12 28
#define RPI27_RA11 27
#define RPI32_RB0  32
#define RPI33_RB1  33
#define RPI34_RB2  134
#define RP35_RB3  35
#define RPI94_RE14 94
#define RPI95_RE15 95
#define RPI24_RA8  24
#define InputRP_RB4  36
#define RP20_RA4  20
#define RPI25_RA9  25
#define RPI51_RC3  51
#define RPI52_RC4  52
#define RPI53_RC5  53
#define RP37_RB5  37
#define RP38_RB6  38
#define RPI58_RC10 58
#define RP39_RB7  39
#define RP40_RB8  40
#define RP41_RB9  41
#define RP54_RC6  54
#define RP55_RC7  55
#define RP56_RC8  56
#define RP57_RC9  57
#define RPI96_RF0  96
#define RP97_RF1  97
#define RP42_RB10 42
#define RP43_RB11 43
#define RPI44_RB12 44
#define InputRP_RB13 45



#endif

// output pps
#define OutputRPnPpsToDefaultPort 0b000000      //RPn连接到默认引脚
#define OutputRPnPpsToU1TX        0b000001     //RPn连接到UART1 发送
#define OutputRPnPpsToU1RTS       0b000010     //RPn连接到UART1 请求发送
#define OutputRPnPpsToU2TX        0b000011     //RPn连接到UART2 发送
#define OutputRPnPpsToU2RTS       0b000100     //RPn连接到UART2 请求发送
#define OutputRPnPpsToSDO1        0b000101     //RPn连接到SPI1 数据输出
#define OutputRPnPpsToSCK1OUT     0b000110     //RPn连接到SPI1 时钟输出
#define OutputRPnPpsToSS1OUT      0b000111     //RPn连接到SPI1 从选择
#define OutputRPnPpsToSDO2        0b001000     //RPn连接到SPI2 数据输出
#define OutputRPnPpsToSCK2OUT     0b001001     //RPn连接到SPI2 时钟输出
#define OutputRPnPpsToSS2OUT      0b001010     //RPn连接到SPI2 从选择
#define OutputRPnPpsToCSDO        0b001011     //RPn连接到DCI 数据输出
#define OutputRPnPpsToCSCKOUT     0b001100     //RPn连接到DCI 时钟输出
#define OutputRPnPpsToCOFSOUT     0b001101     //RPn连接到DCI FSYNC 输出
#define OutputRPnPpsToC1TX        0b001110     //RPn连接到CAN1 发送
#define OutputRPnPpsToC2TX        0b001111     //RPn连接到CAN2 发送
#define OutputRPnPpsToOC1         0b010000     //RPn连接到输出比较1 输出
#define OutputRPnPpsToOC2         0b010001     //RPn连接到输出比较2 输出
#define OutputRPnPpsToOC3         0b010010     //RPn连接到输出比较3 输出
#define OutputRPnPpsToOC4         0b010011     //RPn连接到输出比较4 输出
#define OutputRPnPpsToOC5         0b010100     //RPn连接到输出比较5 输出
#define OutputRPnPpsToOC6         0b010101     //RPn连接到输出比较6 输出
#define OutputRPnPpsToOC7         0b010110     //RPn连接到输出比较7 输出
#define OutputRPnPpsToOC8         0b010111     //RPn连接到输出比较8 输出
#define OutputRPnPpsToC1OUT       0b011000     //RPn连接到比较器输出1
#define OutputRPnPpsToC2OUT       0b011001     //RPn连接到比较器输出2
#define OutputRPnPpsToC3OUT       0b011010     //RPn连接到比较器输出3
#define OutputRPnPpsToU3TX        0b011011     //RPn连接到UART3 发送
#define OutputRPnPpsToU3RTS       0b011100     //RPn连接到UART3 请求发送
#define OutputRPnPpsToU4TX        0b011101     //RPn连接到UART4 发送
#define OutputRPnPpsToU4RTS       0b011110     //RPn连接到UART4 请求发送
#define OutputRPnPpsToSDO3        0b011111     //RPn连接到SPI3 数据输出
#define OutputRPnPpsToSCK3OUT     0b100000     //RPn连接到SPI3 时钟输出
#define OutputRPnPpsToSS3OUT      0b100001     //RPn连接到SPI3 从选择
#define OutputRPnPpsToSDO4        0b100010     //RPn连接到SPI4 数据输出
#define OutputRPnPpsToSCK4OUT     0b100011     //RPn连接到SPI4 时钟输出
#define OutputRPnPpsToSS4OUT      0b100100     //RPn连接到SPI4 从选择
#define OutputRPnPpsToOC9         0b100101     //RPn连接到输出比较9 输出
#define OutputRPnPpsToOC10        0b100110     //RPn连接到输出比较10 输出
#define OutputRPnPpsToOC11        0b100111     //RPn连接到输出比较11 输出
#define OutputRPnPpsToOC12        0b101000     //RPn连接到输出比较12 输出
#define OutputRPnPpsToOC13        0b101001     //RPn连接到输出比较13 输出
#define OutputRPnPpsToOC14        0b101010     //RPn连接到输出比较14 输出
#define OutputRPnPpsToOC15        0b101011     //RPn连接到输出比较15 输出
#define OutputRPnPpsToOC16        0b101100     //RPn连接到输出比较16 输出
#define OutputRPnPpsToPSYNCO1     0b101101     //RPn连接到PWM 主时基同步输出
#define OutputRPnPpsToPSYNCO2     0b101110     //RPn连接到PWM 辅助时基同步输出
#define OutputRPnPpsToQEI1CCMP    0b101111     //RPn连接到QEI1 计数器比较器输出
#define OutputRPnPpsToQEI2CCMP    0b110000     //RPn连接到QEI2 计数器比较器输出
#define OutputRPnPpsToREFCLK      0b110001     //RPn连接到参考时钟输出

//system frequency
 extern const uint32_t SYSTEM_FOSC;

extern void BOOTLOADER_SOFTWARE_RESET();
extern void BOOTLOADER_GOTO_8000();
extern void BOOTLOADER_GOTO_0000();

void System_Initialize_g(void);

void System_Delay_MS_g(uint32_t ms);

#endif	/* XC_HEADER_TEMPLATE_H */

